package xx.services.page.rest;

import java.sql.SQLException;

import javax.servlet.http.HttpServletRequest;
import javax.sql.RowSet;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Context;

import xx.entity.page.PageLayoutItem;
import xx.entity.page.PageLayoutItemContent;
import xx.services.Passport;
import xx.services.util.Constants;

import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

/**
 * page页面布局Item管理服务接口
 * 
 * @Path (Constants.RESTFUL_ROOT_PATH + "/page/layout/item")
 * @author dengjinye,2010-12-23 $LastChangedDate$ $Author$
 */
@Path(Constants.RESTFUL_ROOT_PATH + "/page/layout/item")
public class LayoutItemRest extends Passport implements xx.services.page.inter.ILayoutItemInterface
{

    public LayoutItemRest(@Context
    HttpServletRequest request)
    {
        super(request);
        // TODO Auto-generated constructor stub
    }

    /**
     * 描述：获取一个布局列，包含ItemContent<br>
     * 
     * @GET
     * @Path ("/{item_id}")
     * @param itemId-@PathParam("item_id")
     *            布局列ID
     * @return 布局列实体，包含ItemContent
     * @author chenxiang
     */
    @GET
    @Path("/{item_id}")
    public String get(@PathParam("item_id")
    long itemId)
    {
        try
        {
            PageLayoutItem pli = new PageLayoutItem(qr, owner);
            pli.setItemId(itemId).load();
            return ok(pli);
        }
        catch (SQLException e)
        {
            return error(e);
        }
    }

    /**
     * 获取一个布局列html代码，包含ItemContent的内容<br>
     * 
     * @GET
     * @Path ("/{item_id}/html")
     * @param itemId-@PathParam("item_id")
     *            布局列ID
     * @return 布局列Html代码，不是json数据
     * @author chenxiang
     */
    @GET
    @Path("/{item_id}/html")
    public String getHtml(@PathParam("item_id")
    long itemId)
    {
        try
        {
            PageLayoutItem pli = new PageLayoutItem(qr, owner);
            return ok(pli.setItemId(itemId).toHtml(), HTML);
        }
        catch (SQLException e)
        {
            return error(e);
        }
    }

    /**
     * 修改一个布局列demo。<br>
     * 
     * @PUT
     * @Path ("/{item_id}")
     * @param itemId-@PathParam("item_id")
     *            布局列ID
     * @param item-@FormParam("item")
     *            布局列demo的Json字符串
     * @return 新增的布局列实体
     * @author chenxiang
     */
    @PUT
    @Path("/{item_id}")
    public String update(@PathParam("item_id")
    long itemId, @FormParam("item")
    String item, @FormParam("templet")
    String templet, @FormParam("demo")
    String demo)
    {
        try
        {
            if (item == null)
            {
                PageLayoutItem pli = new PageLayoutItem(qr, owner);
                pli.setItemId(itemId).load();
                pli.setTemplet(templet).setDemo(demo).update();
                return ok(pli);
            }
            else
            {
                PageLayoutItem pli = new PageLayoutItem(qr, owner);
                pli.setItemId(itemId);
                JsonParser parser = new JsonParser();
                JsonObject jo = parser.parse(item).getAsJsonObject();
                pli.instance(jo);
                pli.update(jo);
                return ok(pli);
            }
        }
        catch (Exception e)
        {
            return error(e);
        }
    }

    @GET
    @Path("/{item_id}/content")
    public String getContent(@DefaultValue("0")
    @PathParam("item_id")
    long itemId)
    {
        try
        {
            PageLayoutItem pli = new PageLayoutItem(qr, owner);
            RowSet rs = pli.setItemId(itemId).getContents();
            return ok(rs);
        }
        catch (SQLException e)
        {
            return error(e);
        }
    }

    @POST
    @Path("{item_id}/content/type/{type}/{demo_id}")
    public String addContent(@PathParam("item_id")
    long itemId, @PathParam("type")
    String type, @DefaultValue("0")
    @PathParam("demo_id")
    long demoId, @FormParam("title")
    String title, @DefaultValue("0")
    @FormParam("clazz_id")
    long clazzId, @FormParam("content")
    String content)
    {
        try
        {
            PageLayoutItemContent plic = new PageLayoutItemContent(qr, owner);
            plic.setItemId(itemId);
            if ("layout".equals(type) || "tab".equals(type) || "navigation".equals(type))
            {
                plic.insert(type, demoId, title);
            }
            else if ("list".equals(type) || "view".equals(type))
            {
                plic.insert(type, demoId, title, clazzId);
            }
            else
            {
                plic.insert(type, content);
            }
            return ok(plic);
        }
        catch (Exception e)
        {
            return error(e);
        }
    }
}
